package dados;

import java.util.Calendar;
import java.util.List;

import javax.persistence.TypedQuery;

import seguranca.Usuario;
import basicas.Cliente;
import basicas.Reserva;
import basicas.Veiculo;
import dados.geral.DAOGenerico;
import dados.interfaces.IReservaDAO;

public class ReservaDAO extends DAOGenerico<Reserva> implements IReservaDAO {

	@Override
	public List<Reserva> consultarPorDataReserva(Calendar dataReserva) {
		TypedQuery<Reserva> query = entityManager.createQuery("from Reserva r where r.dataReserva = :dataReserva", Reserva.class);
		query.setParameter("dataReserva", dataReserva);
		return query.getResultList();
	}

	@Override
	public List<Reserva> consultarPorDataInicialLoc(Calendar dataInicialLoc) {
		TypedQuery<Reserva> query = entityManager.createQuery("from Reserva r where r.dataInicialLoc = :dataInicialLoc", Reserva.class);
		query.setParameter("dataInicialLoc", dataInicialLoc);
		return query.getResultList();
	}

	@Override
	public List<Reserva> consultarPorDataFinalLoc(Calendar dataFinalLoc) {
		TypedQuery<Reserva> query = entityManager.createQuery("from Reserva r where r.dataFinalLoc = :dataFinalLoc", Reserva.class);
		query.setParameter("dataFinalLoc", dataFinalLoc);
		return query.getResultList();
	}

	@Override
	public List<Reserva> consultarPorCliente(Cliente cliente) {
		TypedQuery<Reserva> query = entityManager.createQuery("from Reserva r where r.cliente = :cliente", Reserva.class);
		query.setParameter("cliente", cliente);
		return query.getResultList();
	}

	@Override
	public List<Reserva> consultarPorVeiculo(Veiculo veiculo) {
		TypedQuery<Reserva> query = entityManager.createQuery("from Reserva r where r.veiculo = :veiculo", Reserva.class);
		query.setParameter("veiculo", veiculo);
		return query.getResultList();
	}

	@Override
	public List<Reserva> consultarPorUsuarioPromotor(Usuario usuarioPromotor) {
		TypedQuery<Reserva> query = entityManager.createQuery("from Reserva r where r.usuarioPromotor = :usuarioPromotor", Reserva.class);
		query.setParameter("usuarioPromotor", usuarioPromotor);
		return query.getResultList();
	}

	
}
